#!/bin/bash

# =================================================================
# 3X-UI 多 IP 配置一键部署脚本 (基于用户提供的步骤) - V2.0 (新增网卡启动)
# 注意：请确保运行前备份 /etc/network/interfaces 文件！
# =================================================================

# -----------------------------------------------------------------
# 【配置区】请根据您的网络环境修改以下变量
# -----------------------------------------------------------------

# 主网卡名称 (您的步骤中是 eth1)
INTERFACE="eth1"

# 默认网关 IP (用于 default via 路由)
GATEWAY_IP="157.7.74.1" # 请核实您的网关IP

# 主 IP 和额外的 IP 地址列表
# 请根据你的需求修改 IP 列表
EXTRA_IPS=("157.7.74.89" "157.7.74.90" "157.7.74.91" "157.7.74.92" "157.7.74.93" "157.7.74.94" "157.7.74.95")

# 网络范围/子网 (您的路由中是 157.72.72.0/23)
NETWORK_RANGE="157.7.74.0/23"

# -----------------------------------------------------------------
# 步骤一：创建路由表 (用户指定 200 extraip)
# -----------------------------------------------------------------
echo "=> 步骤 1/6: 创建路由表条目 (200 extraip)"
if grep -q "200 extraip" /etc/iproute2/rt_tables; then
    echo "路由表条目 '200 extraip' 已存在，跳过创建。"
else
    echo "200 extraip" | sudo tee -a /etc/iproute2/rt_tables
    echo "路由表条目 '200 extraip' 添加成功。"
fi
echo ""

# -----------------------------------------------------------------
# 步骤三：创建主配置脚本 /usr/local/bin/setup_extraip.sh
# -----------------------------------------------------------------
SETUP_SCRIPT="/usr/local/bin/setup_extraip.sh"
echo "=> 步骤 3/6: 创建主配置脚本 ${SETUP_SCRIPT}"

# 构建 IP 数组字符串
IP_ARRAY_STRING=$(printf "\"%s\" " "${EXTRA_IPS[@]}")

# 写入脚本内容
sudo tee ${SETUP_SCRIPT} > /dev/null << EOF
#!/bin/bash

# IP 列表 (来自主脚本配置)
ips=(${IP_ARRAY_STRING})

for ip in "\${ips[@]}"; do
  # 绑定 IP 地址 (使用 /23 子网掩码)
  ip addr add \${ip}/23 dev ${INTERFACE}

  # 添加路由规则 (强制流量从正确的 IP 地址发出)
  ip rule add from \${ip}/32 table extraip
  ip route add ${NETWORK_RANGE} dev ${INTERFACE} src \${ip} table extraip
  ip route add default via ${GATEWAY_IP} dev ${INTERFACE} table extraip
done
EOF
echo "主配置脚本创建成功。"
echo ""

# -----------------------------------------------------------------
# 步骤四：创建清理脚本 /usr/local/bin/setup_extraip_clean.sh
# -----------------------------------------------------------------
CLEANUP_SCRIPT="/usr/local/bin/setup_extraip_clean.sh"
echo "=> 步骤 4/6: 创建清理脚本 ${CLEANUP_SCRIPT}"

# 写入脚本内容
sudo tee ${CLEANUP_SCRIPT} > /dev/null << EOF
#!/bin/bash

# IP 列表 (来自主脚本配置)
ips=(${IP_ARRAY_STRING})

for ip in "\${ips[@]}"; do
  # 删除 IP 地址
  ip addr del \${ip}/23 dev ${INTERFACE} 2>/dev/null

  # 删除路由规则
  ip rule del from \${ip}/32 table extraip 2>/dev/null
done

# 清理路由表
ip route flush table extraip
EOF
echo "清理脚本创建成功。"
echo ""

# -----------------------------------------------------------------
# 步骤五：赋予脚本权限
# -----------------------------------------------------------------
echo "=> 步骤 5/6: 赋予脚本执行权限"
sudo chmod +x ${SETUP_SCRIPT}
sudo chmod +x ${CLEANUP_SCRIPT}
echo "脚本权限设置成功。"
echo ""

# -----------------------------------------------------------------
# 步骤二：修改 /etc/network/interfaces 文件
# -----------------------------------------------------------------
echo "=> 步骤 2/6: 修改 /etc/network/interfaces 文件..."

# 原始配置文件内容 (基于您的步骤，请务必核实其中的 address 和 netmask)
NETWORK_CONFIG="
# 配置主网卡 ${INTERFACE}，并绑定主 IP
auto ${INTERFACE}
iface ${INTERFACE} inet static
address ${EXTRA_IPS[0]}
netmask 255.255.254.0 
gateway ${GATEWAY_IP} 
dns-nameservers 150.95.10.8 150.95.10.9 

# 在网卡启动后，执行脚本来绑定额外的 IP 并配置路由
post-up ${SETUP_SCRIPT}
# 在网卡关闭前，执行脚本来清理配置，这能确保路由表不混乱
post-down ${CLEANUP_SCRIPT}
"

echo "---"
echo "!!! 警告：自动追加配置到 /etc/network/interfaces !!!"
echo "请手动检查 /etc/network/interfaces 文件，并删除旧的 ${INTERFACE} 配置，以避免冲突！"
echo "---"

sudo echo "${NETWORK_CONFIG}" | sudo tee -a /etc/network/interfaces > /dev/null
echo "/etc/network/interfaces 文件配置追加完成。"
echo ""

# -----------------------------------------------------------------
# 步骤六：启动/重启网卡 (新增步骤)
# -----------------------------------------------------------------
echo "=> 步骤 6/6: 重启网络接口以应用配置..."
# 使用 ifup -a 重新加载所有配置，会触发 post-up 脚本
if sudo ifup -a; then
    echo "网络配置应用成功。IP 和路由已生效。"
else
    # 如果 ifup -a 失败，尝试重启 networking 服务 (更激进，但可能有效)
    echo "警告：ifup -a 可能失败，尝试重启 networking 服务..."
    if sudo systemctl restart networking; then
        echo "networking 服务重启成功。"
    else
        echo "🚨 致命错误：重启 networking 服务失败。可能需要手动重启服务器。"
    fi
fi
echo ""

# -----------------------------------------------------------------
# 总结
# -----------------------------------------------------------------
echo "==================================================="
echo "✅ 多 IP 配置脚本部署完成并已尝试应用！"
echo "==================================================="
echo "请务必执行以下操作："
echo "1. 手动检查 /etc/network/interfaces 文件，并删除旧的 ${INTERFACE} 配置。"
echo "2. 运行 'ip addr show ${INTERFACE}' 检查 IP 是否已绑定。"
echo "3. 如果网络仍然未按预期工作，请执行 'sudo reboot' 命令重启服务器。"
echo "==================================================="